home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / misc / date.lha / Date / Oberon / txt / Date.doc < prev    next >
Text File  |  1994-11-30  |  59KB  |  2,499 lines

  1. TABLE OF CONTENTS
  2.  
  3. Date/--background--
  4. Date/--history--
  5. Date/GregorianDayDiff
  6. Date/GregorianDayGreater
  7. Date/GregorianDaysAfterWeekday
  8. Date/GregorianDaysBeforeWeekday
  9. Date/GregorianDaySmaller
  10. Date/GregorianDiffDate
  11. Date/GregorianEaster
  12. Date/GregorianLeapYear
  13. Date/GregorianMonthDays
  14. Date/GregorianMoonAge
  15. Date/GregorianToJD
  16. Date/GregorianWeek
  17. Date/GregorianWeekday
  18. Date/GregorianYearDays
  19. Date/GSYearToJD
  20. Date/GYearToScaliger
  21. Date/HeisDayDiff
  22. Date/HeisDayGreater
  23. Date/HeisDaysAfterWeekday
  24. Date/HeisDaysBeforeWeekday
  25. Date/HeisDaySmaller
  26. Date/HeisDiffDate
  27. Date/HeisLeapYear
  28. Date/HeisMonthDays
  29. Date/HeisToJD
  30. Date/HeisWeek
  31. Date/HeisWeekday
  32. Date/HeisYearDays
  33. Date/HSYearToJD
  34. Date/HYearToScaliger
  35. Date/JDtoMJD
  36. Date/JDToTime
  37. Date/JSYearToJD
  38. Date/JulianDayDiff
  39. Date/JulianDayGreater
  40. Date/JulianDaysAfterWeekday
  41. Date/JulianDaysBeforeWeekday
  42. Date/JulianDaySmaller
  43. Date/JulianDiffDate
  44. Date/JulianLeapYear
  45. Date/JulianMonthDays
  46. Date/JulianToJD
  47. Date/JulianWeek
  48. Date/JulianWeekday
  49. Date/JulianYearDays
  50. Date/JYearToScaliger
  51. Date/LMT
  52. Date/MJDtoJD
  53. Date/ScaligerYearToG
  54. Date/ScaligerYearToH
  55. Date/ScaligerYearToJ
  56. Date/SecToTime
  57. Date/TimeToJD
  58. Date/GregorianEaster
  59. Date/TimeToSec
  60. Date/TimeZoneFactor
  61. Date/--background--                                       Date/--background--
  62.  
  63.    NAME
  64.     Date -- This module was designed to help calc. calendar dates (V33)
  65.  
  66.    FUNCTION
  67.     I now about the date routines in the Amiga-OS(TM), but I decided
  68.     not to use them, because of their limited functionalities and of
  69.     the portability of this Module!
  70.  
  71.    NOTES
  72.     A tropical year is 365.2422 days! / 365d, 5h, 48min, 46sec
  73.     A moon month is 29.53059 days! / 29d, 12h, 44min, 2.9 sec
  74.     A moon phase is 7.38265 days!
  75.  
  76.     (German) Books which helped me creating this:
  77.         Kleine Naturwissenschaftliche Bibliothek, Band 23
  78.         Ewige Kalender
  79.         A.W. Butkewitsch & M.S. Selikson
  80.         5. Auflage
  81.         Teubner, Leipzig 1974
  82.         ISBN 3-322-00393-0
  83.  
  84.         Tag und Woche, Monat und Jahr: eine Kulturgeschichte des
  85.         Kalenders
  86.         Rudolf Wendorff
  87.         Westdeutscher, Opladen 1993
  88.         ISBN 3-531-12417-X
  89.  
  90.         Kalender und Chronologie: Bekanntes & Unbekanntes aus der
  91.         Kalenderwissenschaft
  92.         Heinz Zemanek
  93.         4. Auflage
  94.         Oldenbourg, München 1987
  95.         ISBN 3-486-20447-5
  96.  
  97.         Meyers Handbuch
  98.         über das Weltall
  99.         Karl Schaifers & Gerhard Traving
  100.         5. Auflage
  101.         Bibliographisches Institut Mannheim 1973
  102.         ISBN 3-411-00940-3
  103.  
  104.     (English) Books which helped me creating this:
  105.         Mathematical Astronomy with a Pocket Calculator
  106.         Aubrey Jones Fras
  107.         unknown(first) Edition
  108.         David & Charles Newton Abbot, London 1978
  109.         ISBN 0-7153-7675-6
  110.  
  111.    COPYRIGHT
  112.     This module is Copyright 1994 by Kai Hofmann - all rights reserved!
  113.     For private use, Public Domain, Gift Ware, Freeware and Shareware
  114.     you could use this module under following conditions:
  115.     - You send me a little gift (money is very welcome :)
  116.         For Bank Accocunt see below - but *ONLY* send in DM
  117.         to this Bank Account!!!
  118.       Other nice gifts: all Amiga hardware, and I am searching for a
  119.       good old 1541 (C64 floppy)
  120.     - You include a notice in your product, that you use this library
  121.       and that it is Copyright by Kai Hofmann!
  122.     If you want to redistribute this library read the following points:
  123.     - Redistribution warranty is given to:
  124.         Fred Fish for his great Amiga-Software-Library
  125.         The German SAAR AG PD-Library
  126.         The German AMOK PD-Library
  127.         All public accessible INTERNET servers and PHONE boxes!
  128.         All other who NOT take more than DM 5.- for one disk
  129.         ALL other who NOT take more than DM 50.- for one CD
  130.     For commercial use send me DM 200.-
  131.     But if you are Apple or Microsoft you have to send (20000.- US$)
  132.  
  133.    DISCLAIMER
  134.  
  135.       THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
  136.    APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
  137.    HOLDER AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
  138.    OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
  139.    THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  140.    PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
  141.    PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE
  142.    COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
  143.  
  144.       IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  145.    WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY REDISTRIBUTE THE
  146.    PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
  147.    GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
  148.    USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS
  149.    OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
  150.    THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
  151.    PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
  152.    POSSIBILITY OF SUCH DAMAGES.
  153.  
  154.    ADDITIONAL INFORMATIONS
  155.     I have tried to make portable/usefull and I hope bugfree software
  156.     for eternity - but this seems to be impossible (sorry!) :)
  157.     So I hope you will pay a fee for this.
  158.  
  159.    AUTHOR
  160.     Kai Hofmann
  161.     Arberger Heerstraße 92
  162.     28307 Bremen
  163.     Germany
  164.     EMail: i07m@alf.zfn.uni-bremen.de
  165.     (no phone - I hate it!)
  166.  
  167.     Bank account : 1203 7503
  168.     Account owner: Kai Hofmann
  169.     Bank code    : 290 501 01
  170.     Bank name    : Sparkasse in Bremen
  171.     Bank address : 28307 Bremen / Germany
  172.  
  173.     THANX
  174.     Thanx are going to the following people:
  175.     Danial Armor        - For his hint about the Oberon-2 SHORT
  176.                   command
  177.     Heinz Zemanek        - For his great book
  178.     Christian Schaefer    - For spending time on this lib with his
  179.                   Borland C++ 4.0 compiler
  180.     Rita Reichl        - For correcting my bad english ;-)
  181.     Jim Rickman        - For reporting a bug
  182.  
  183. Date/--history--                                             Date/--history--
  184.  
  185.    NAME
  186.     history -- This is the development history of the Date module
  187.  
  188.    VERSION
  189.     $VER: Date 33.089 (30.11.1994)
  190.  
  191.    HISTORY
  192.     16.01.1994 -    Procedures: JulianLeapYear, GregorianLeapYear &
  193.             HeisLeapYear initiated.
  194.     22.01.1994 -    Procedures: JulianMonthDays, GregorianMonthDays,
  195.             HeisMonthDays, JulianYearDays, GregorianYearDays,
  196.             HeisYearDays, JulianDayDiff, GregorianDayDiff,
  197.             HeisDayDiff, JulianDaySmaller, GregorianDaySmaller,
  198.             HeisDaySmaller, JulianWeekday, GregorianWeekday,
  199.             HeisWeekday, JulianDaysBeforeWeekday,
  200.             GregorianDaysBeforeWeekday, HeisDaysBeforeWeekday,
  201.             JulianDaysAfterWeekday, GregorianDaysAfterWeekday,
  202.             HeisDaysAfterWeekday JulianDiffDate, FreeDate
  203.             initiated.
  204.             Types: Weekdays, Date, DatePtr initiated.
  205.             Vars of Gregorian reform initiated
  206.             (for changing to different countries)
  207.     23.01.1994 -    Procedures: JulianDiffDate finished,
  208.             GregorianDiffDate, HeisDiffDate, JYearToScaliger,
  209.             GYearToScaliger, HYearToScaliger, ScaligerYearToJ,
  210.             ScaligerYearToG, ScaligerYearToH, JSYearToJD,
  211.             GSYearToJD, HSYearToJD, JDtoMJD, MJDtoJD, JulianToJD,
  212.             GregorianToJD, HeisToJD, TimeToJD, JDToTime, FreeTime
  213.             initiated.
  214.             Types: Time, TimePtr initiated.
  215.     28.01.1994 -    Procedures: GregorianMoonAge, MoonMonthAge,
  216.             GregorianEaster initiated.
  217.     30.01.1994 -    Procedures: JulianDiffDate, GregorianDiffDate,
  218.             HeisDiffDate, JDtoTime, GregorianEaster edited
  219.             (changing return value from ptr to VAL variables).
  220.             Procedures: FreeDate, FreeTime deleted.
  221.             Types: Date, DatePtr, Time, TimePtr deleted (not
  222.             longer needed, because of the procedure changes).
  223.             Procedures: GregorianMoonAge, GregorianEaster changed
  224.             year parameter from CARDINAL to INTEGER (this is more
  225.             consistent to the rest of the library).
  226.             Bugs removed: GregorianWeekday, HeisWeekday
  227.             (before removing, the weekday for leapyears was
  228.             wrong)
  229.             Procedure: GregorianEaster finished.
  230.     30.01.1994 -    Ported to Oberon-2
  231.     31.01.1994 -    Compiled with Oberon-2 V3.11
  232.     12.02.1994 -    Procedures: TimeZoneFactor, LMT, TimeToSec, SecToTime
  233.             initiated.
  234.             Version-String installed :)
  235.     12.02.1994 -    Starting translation to SAS C 6.51
  236.             Date.h translated
  237.     13.02.1994 -    Continuation of C translation
  238.     17.02.1994 -    New Oberon-2 Port, because yesterday Daniel Armor
  239.             gives me a small hint about the SHORT command
  240.             (I did not know about this!)
  241.     17.02.1994 -    Small bug in Autodocs removed
  242.             making this text as Date/--history-- autodoc
  243.     17.02.1994 -    Continuation of C translation
  244.     18.02.1994 -    Finished with C translation
  245.     19.02.1994 -    C bugs removed (thanx to SAS for helping a C Lamer
  246.             like me!), some optimizations done too.
  247.     19.02.1994 -    Oberon-2 version compiled with V40.17 includes
  248.     21.02.1994 -    Writing Modula-II testmodule
  249.             Vars for the begining of Heis calculation initiated.
  250.             Fixed small bugs in GregorianWeekday, HeisWeekday,
  251.             TimeToSec, SecToTime
  252.             Return-value of LMT changed to LONGINT!
  253.             Converting testmodule to Oberon-2
  254.     22.02.1994 -    Converting testmodule to C
  255.     23.02.1994 -    I noticed, that I forgot the 3 functions
  256.             JulianWeek, GregorianWeek, HeisWeek
  257.     24.02.1994 -    Initiated the 3 forgotten functions
  258.     26.02.1994 -    Initiating new GregorianEastern with Gauß-algorithms
  259.             but ONLY for 1900-2099!
  260.     27.02.1994 -    Bug fixed in JulianWeekday
  261.             Bugs fixed in JulianDayDiff, GregorianDayDiff,
  262.             HeisDayDiff
  263.             JulianDayGreater, GregorianDayGreater,
  264.             HeisDayGreater Initiated.
  265.     02.03.1994 -    Small bug fixed in HeisdayDiff
  266.             Bugs from 27.02. fixed in Modula-II and Oberon-2
  267.             versions
  268.             I found the way to extend Gregorian Easter!
  269.             Small bug fixed in JulianWeek, GregorianWeek,
  270.             HeisWeek (~(M2) is not !(C))
  271.     05.03.1994 -    Some internal bugs removed
  272.             New internal procedures GregorianSB,
  273.             GregorianJHSB, GregorianJHStartSB!
  274.             Extending GregorianEaster :)
  275.     11.03.1994 -    Things from 05.03. done in Modula-II and Oberon
  276.     12.03.1994 -    If __SASC is defined autoinitalization instead of
  277.             _DateInit will be used!
  278.     13.03.1994 -    After studying the SAS C Manual again I decided to
  279.             check for __SASC_650 instead of __SASC because of
  280.             the available of priorities!
  281.             Setting the priority of _DateInit for
  282.             autoinitalization to 600!
  283.     15.03.1994 -    Making Date as library
  284.     16.03.1994 -    Some work on the Autodocs was done
  285.             Eleminating OldGregorianEaster by comments
  286.             (ANSI: STOP bad standards like that there are NO
  287.              nestedcomments possible in C!!!)
  288.     19.03.1994 -    Some work on the Autodocs was done in the M2 Code
  289.     20.03.1994 -    Some work on the Autodocs was done in the Oberon Code
  290.     22.03.1994 -    In JDtoMJD, MJD to JD an L was added to the constant
  291.             In GregorianWeekday(), HeisWeekday(),
  292.             JulianDiffDate(), GregorianDiffDate(),
  293.             HeisDiffDate(), JDToTime() I have inserted
  294.             conversions (found with Borland C++ 4.0)
  295.     24.03.1994 -    Making SunOS4.1.3, SunOS5.3(Solaris2.3) &
  296.             RS6000 AIX3.2.? binaries with gcc
  297.             Eliminating nested commends by inserting a space
  298.             between / and * (I hate this ANSI C standard
  299.             feature for commends :(
  300.     27.03.1994 -    Adding library register assignments to the autodocs
  301.     03.04.1994 -    Small fixes for the SAS C++ Compiler
  302.             Small bug fixed in the M2 version of GregorianEaster
  303.     04.04.1994 -    Adding some 'static' keywords
  304.     10.04.1994 -    Changing from Shareware to Gift Ware ;-)
  305.     02.08.1994 -    Small fixes in the Autodocs (thanks to Rita Reichl
  306.             for correcting my bad english ;-)
  307.     11.08.1994 -    Again small fixes in the Autodocs!
  308.     13.11.1994 -    Small fix in JulianWeek(),GregorianWeek(),HeisWeek().
  309.             Thanks to Jim Rickman for reporting the bug!
  310.             Small changes in the Autodocs!
  311.     30.11.1994 -    Fix the bug from 13.11. in M2 and Oberon code.
  312.  
  313. Date/GregorianDayDiff                                   Date/GregorianDayDiff
  314.  
  315.    NAME
  316.     GregorianDayDiff -- Calculates the days between 2 dates. (V33)
  317.  
  318.    SYNOPSIS
  319.     days := GregorianDayDiff(day1,month1,year1,day2,month2,year2);
  320.  
  321.     PROCEDURE GregorianDayDiff(day1,month1 : SHORTINT; year1 : INTEGER;
  322.         day2,month2 : SHORTINT; year2 : INTEGER) : LONGINT;
  323.  
  324.    FUNCTION
  325.     GregorianDayDiff gives you back the number of days between
  326.     two specified dates.
  327.  
  328.    INPUTS
  329.     day1   - day of the first date
  330.     month1 - month of the first date
  331.     year1  - year of the first date
  332.     day2   - day of the second date
  333.     month2 - month of the second month
  334.     year2  - year of the second date
  335.  
  336.    RESULT
  337.     days - The number of days between the two dates
  338.         (positive if date1 <= date2).
  339.  
  340.    EXAMPLE
  341.     ...
  342.     days := GregorianDayDiff(18,9,1970,22,1,1994);
  343.     WriteString("Age of Kai Hofmann in days : ");
  344.     WriteInt(days,10); WriteLn;
  345.     ...
  346.  
  347.    NOTES
  348.     It is better only to use this function for years from -7 to 3200!
  349.  
  350.    BUGS
  351.     If you use on of the dates 5.10.1582 to 14.10.1582 you will get a
  352.     wrong output, because this days don't exist!
  353.  
  354.    SEE ALSO
  355.     JulianDayDiff(),HeisDayDiff(),GregorianDaySmaller(),
  356.     GregorianDayGreater(),GregorianMonthDays(),GregorianYearDays()
  357.  
  358. Date/GregorianDayGreater                             Date/GregorianDayGreater
  359.  
  360.    NAME
  361.     GregorianDayGreater -- Checks if date1 is great than date2. (V33)
  362.  
  363.    SYNOPSIS
  364.     greater := GregorianDayGreater(day1,month1,year1,day2,month2,year2);
  365.  
  366.     PROCEDURE GregorianDayGreater(day1,month1 : SHORTINT;
  367.         year1 : INTEGER; day2,month2 : SHORTINT;
  368.         year2 : INTEGER) : BOOLEAN;
  369.  
  370.    FUNCTION
  371.     GregorianDayGreater test if date1 is greater than date2.
  372.  
  373.    INPUTS
  374.     day1   - day of the first date
  375.     month1 - month of the first date
  376.     year1  - year of the first date
  377.     day2   - day of the second date
  378.     month2 - month of the second month
  379.     year2  - year of the second date
  380.  
  381.    RESULT
  382.     greater - This is TRUE is date1 > date2 otherwise it's FALSE.
  383.  
  384.    EXAMPLE
  385.     ...
  386.     IF GregorianDayGreater(18,9,1970,22,1,1994) THEN
  387.       WriteString(">"); WriteLn;
  388.     ELSE
  389.       WriteString("<="); WriteLn;
  390.     END;
  391.     ...
  392.  
  393.    NOTES
  394.     It is better only to use this function for years from -7 to 3200!
  395.  
  396.    BUGS
  397.     No known bugs.
  398.  
  399.    SEE ALSO
  400.     JulianDayGreater(),HeisDayGreater()
  401.  
  402. Date/GregorianDaysAfterWeekday                 Date/GregorianDaysAfterWeekday
  403.  
  404.    NAME
  405.     GregorianDaysAfterWeekday -- Returns the diff to wday after. (V33)
  406.  
  407.    SYNOPSIS
  408.     days := GregorianDaysAfterWeekday(day,month,year,weekday);
  409.  
  410.     PROCEDURE GregorianDaysAfterWeekday(day,month : SHORTINT;
  411.         year : INTEGER; weekday : Weekdays) : SHORTINT;
  412.  
  413.    FUNCTION
  414.     Returns the days to the weekday after the specified date.
  415.     So if you specify the 22.1.1994 (Saturday) and Thursday
  416.     you get back 5!
  417.     If you specify the 22.1.1994 and Saturday you get back 0
  418.     (the same day)!
  419.  
  420.    INPUTS
  421.     day     - day of the date
  422.     month   - month of the date
  423.     year    - year of the date
  424.     weekday - weekday to search for building difference
  425.  
  426.    RESULT
  427.     days - The days after to the searched weekday.
  428.  
  429.    EXAMPLE
  430.     ...
  431.     days := GregorianDaysAfterWeekday(22,1,1994,Thursday);
  432.     ...
  433.  
  434.    NOTES
  435.     It is better to use this function only from -7 to 3200!
  436.  
  437.    BUGS
  438.     See GregorianWeekday()!
  439.  
  440.    SEE ALSO
  441.     JulianDaysAfterWeekday(),HeisDaysAfterWeekday(),GregorianWeekday()
  442.  
  443. Date/GregorianDaysBeforeWeekday               Date/GregorianDaysBeforeWeekday
  444.  
  445.    NAME
  446.     GregorianDaysBeforeWeekday -- Returns the diff to wday before. (V33)
  447.  
  448.    SYNOPSIS
  449.     days := GregorianDaysBeforeWeekday(day,month,year,weekday);
  450.  
  451.     PROCEDURE GregorianDaysBeforeWeekday(day,month : SHORTINT;
  452.         year : INTEGER; weekday : Weekdays) : SHORTINT;
  453.  
  454.    FUNCTION
  455.     Returns the days to the weekday before the specified date.
  456.     So if you specify the 22.1.1994 (Saturday) and Thursday
  457.     you get back 2!
  458.     If you specify the 22.1.1994 and Saturday you get back 0
  459.     (the same day)!
  460.  
  461.    INPUTS
  462.     day     - day of the date
  463.     month   - month of the date
  464.     year    - year of the date
  465.     weekday - weekday to search for building difference
  466.  
  467.    RESULT
  468.     days - The days back to the searched weekday (1-7)
  469.         If you get back 8 an error occurs!
  470.  
  471.    EXAMPLE
  472.     ...
  473.     days := GregorianDaysBeforeWeekday(22,1,1994,Thursday);
  474.     ...
  475.  
  476.    NOTES
  477.     It is better to use this function only from -7 to 3200!
  478.  
  479.    BUGS
  480.     See GregorianWeekday()!
  481.  
  482.    SEE ALSO
  483.     JulianDaysBeforeWeekday(),HeisDaysBeforeWekday(),GregorianWeekday()
  484.  
  485. Date/GregorianDaySmaller                             Date/GregorianDaySmaller
  486.  
  487.    NAME
  488.     GregorianDaySmaller -- Checks if date1 is smaller than date2. (V33)
  489.  
  490.    SYNOPSIS
  491.     smaller := GregorianDaySmaller(day1,month1,year1,day2,month2,year2);
  492.  
  493.     PROCEDURE GregorianDaySmaller(day1,month1 : SHORTINT;
  494.         year1 : INTEGER; day2,month2 : SHORTINT;
  495.         year2 : INTEGER) : BOOLEAN;
  496.  
  497.    FUNCTION
  498.     GregorianDaySmaller test if date1 is smaller than date2.
  499.  
  500.    INPUTS
  501.     day1   - day of the first date
  502.     month1 - month of the first date
  503.     year1  - year of the first date
  504.     day2   - day of the second date
  505.     month2 - month of the second month
  506.     year2  - year of the second date
  507.  
  508.    RESULT
  509.     smaller - This is TRUE is date1 < date2 otherwise it's FALSE.
  510.  
  511.    EXAMPLE
  512.     ...
  513.     IF GregorianDaySmaller(18,9,1970,22,1,1994) THEN
  514.       WriteString("<"); WriteLn;
  515.     ELSE
  516.       WriteString(">="); WriteLn;
  517.     END;
  518.     ...
  519.  
  520.    NOTES
  521.     It is better only to use this function for years from -7 to 3200!
  522.  
  523.    BUGS
  524.     No known bugs.
  525.  
  526.    SEE ALSO
  527.     JulianDaySmaller(),HeisDaySmaller()
  528.  
  529. Date/GregorianDiffDate                                 Date/GregorianDiffDate
  530.  
  531.    NAME
  532.     GregorianDiffDate -- Returns the diff date to another date. (V33)
  533.  
  534.    SYNOPSIS
  535.     GregorianDiffDate(day,month,year,diffdays,dday,dmonth,dyear);
  536.  
  537.     PROCEDURE GregorianDiffDate(day,month : SHORTINT;
  538.         year,days : INTEGER; VAR dday,dmonth : SHORTINT;
  539.         VAR dyear : INTEGER);
  540.  
  541.    FUNCTION
  542.     Returns the date wich lies diffdays before/after the specified date.
  543.  
  544.    INPUTS
  545.     day      - day of the date
  546.     month    - month of the date
  547.     year     - year of the date
  548.     diffdays - difference to the date in days
  549.  
  550.    RESULT
  551.     dday   - Destination day
  552.     dmonth - Destination month
  553.     dyear  - Destination year
  554.  
  555.    EXAMPLE
  556.     ...
  557.     GregorianDiffDate(23,1,1994,7,dday,dmonth,dyear);
  558.     ...
  559.  
  560.    NOTES
  561.     It is better to use this function only from -7 to 3200!
  562.  
  563.    BUGS
  564.     unknown.
  565.  
  566.    SEE ALSO
  567.     JulianDiffDate(),HeisDiffDate(),GregoriandayDiff(),
  568.     GregorianMonthDays()
  569.  
  570. Date/GregorianEaster                                     Date/GregorianEaster
  571.  
  572.    NAME
  573.     GregorianEaster -- Returns the date of eastern in a year (V33)
  574.  
  575.    SYNOPSIS
  576.     GregorianEaster(year,dday,dmonth);
  577.  
  578.     PROCEDURE GregorianEaster(year : INTEGER;
  579.         VAR dday,dmonth : SHORTINT);
  580.  
  581.    FUNCTION
  582.     Returns the date of eastern for a specified year.
  583.  
  584.    INPUTS
  585.     year  - eastern is calculated for this year
  586.  
  587.    RESULT
  588.     dday   - day of easter-Sunday
  589.     dmonth - month of easter-Sunday
  590.  
  591.    EXAMPLE
  592.     ...
  593.     GregorianEaster(1994,dday,dmonth);
  594.     ...
  595.  
  596.    NOTES
  597.     Use this only for 1582 to 4100!
  598.     This is only a experimental version!
  599.  
  600.    BUGS
  601.     In some years eastern lies one week behind!
  602.  
  603.    SEE ALSO
  604.     GregorianMoonAge(),GregorianDaysAfterWeekday()
  605.  
  606. Date/GregorianLeapYear                                 Date/GregorianLeapYear
  607.  
  608.    NAME
  609.     GregorianLeapYear -- Checks if a year is a leap year. (V33)
  610.  
  611.    SYNOPSIS
  612.     leapyear := GregorianLeapYear(year);
  613.  
  614.     PROCEDURE GregorianLeapYear(year : INTEGER) : BOOLEAN;
  615.  
  616.    FUNCTION
  617.     GregorianLeapYear checks if a year is a leap year.
  618.     For years after 1582 all years devideable by 4 are leap years,
  619.     without years devideable by 100, but years devideable by 400
  620.     are leap years again!
  621.     For years before 1582 see JulianLeapYear().
  622.  
  623.    INPUTS
  624.     year - The year which should be checked (from -32768 to 32767)
  625.         I think only values from -7 to 3200 are valid, because of
  626.         the variant that was done on -8 by Augustus!
  627.  
  628.    RESULT
  629.     leapyear - TRUE if the year is a leap year, otherwise false.
  630.  
  631.    EXAMPLE
  632.     ...
  633.     IF GregorianLeapYear(1994) THEN
  634.       WriteString("leap year!");
  635.     ELSE
  636.       WriteString("no leap year!");
  637.     END;
  638.     WriteLn;
  639.     ...
  640.  
  641.    NOTES
  642.     A year is 365.2425 days long!
  643.     Use this function only for values from -7 to 3200!
  644.  
  645.    BUGS
  646.     No known bugs.
  647.  
  648.    SEE ALSO
  649.     JulianLeapYear(),HeisLeapYear()
  650.  
  651. Date/GregorianMonthDays                               Date/GregorianMonthDays
  652.  
  653.    NAME
  654.     GregorianMonthDays -- Gives back the number of days of a month. (V33)
  655.  
  656.    SYNOPSIS
  657.     days := GregorianMonthDays(month,year);
  658.  
  659.     PROCEDURE GregorianMonthDays(month : SHORTINT;
  660.         year : INTEGER) : SHORTINT;
  661.  
  662.    FUNCTION
  663.     GregorianMonthDays gives you back the number of days a month in
  664.     a specified year has.
  665.     For the year 1582 and the month 10 there are only 21 days,
  666.     because of the Gregorian-reform 10 days are delete from
  667.     the month (for more - look out for books about this!)
  668.  
  669.    INPUTS
  670.     month - The month from wich you want to get the number of days.
  671.     year  - The year in which the month is.
  672.  
  673.    RESULT
  674.     days - The number of days the month uses, or 0 if you use
  675.         a wrong month.
  676.  
  677.    EXAMPLE
  678.     ...
  679.     days := GregorianMonthDays(1,1994);
  680.     WriteString("Days of January 1994 : ");
  681.     WriteCard(days,2); WriteLn;
  682.     ...
  683.  
  684.    NOTES
  685.     Use this function only for years from -7 to 3200!
  686.  
  687.    BUGS
  688.     If the reform in a country is not in the same month an error will
  689.     occur!
  690.  
  691.    SEE ALSO
  692.     GregorianLeapYear(),JulianMonthDays(),HeisMonthDays()
  693.  
  694. Date/GregorianMoonAge                                   Date/GregorianMoonAge
  695.  
  696.    NAME
  697.     GregorianMoonAge -- Returns the age of the moon (V33)
  698.  
  699.    SYNOPSIS
  700.     ep := GregorianMoonAge(day,month,year);
  701.  
  702.     PROCEDURE GregorianMoonAge(day,month : SHORTINT;
  703.         year : INTEGER) : SHORTINT;
  704.  
  705.    FUNCTION
  706.     Returns the age of the moon on a specified date.
  707.  
  708.    INPUTS
  709.     day   - For this day the age is calculated.
  710.     month - For this month the age is calculated.
  711.     year  - For this year the age is calculated.
  712.  
  713.    RESULT
  714.     ep - The age of the moon on the specified date.
  715.  
  716.    EXAMPLE
  717.     ...
  718.     ep := GregorianMoonAge(18,9,1994);
  719.     ...
  720.  
  721.    NOTES
  722.     Use this only for 1582 to 4100!
  723.     This is only a experimental version!
  724.  
  725.    BUGS
  726.     unknown.
  727.  
  728.    SEE ALSO
  729.     MoonMonthAge(),GregorianEP()
  730.  
  731. Date/GregorianToJD                                         Date/GregorianToJD
  732.  
  733.    NAME
  734.     GregorianToJD -- Returns the JD for a date. (V33)
  735.  
  736.    SYNOPSIS
  737.     jd := GregorianToJD(day,month,year);
  738.  
  739.     PROCEDURE GregorianToJD(day,month : SHORTINT;
  740.         year : INTEGER) : LONGINT;
  741.  
  742.    FUNCTION
  743.     Returns the JD for a Gregorian date.
  744.  
  745.    INPUTS
  746.     day      - day of the date to convert
  747.     month    - month of the date to convert
  748.     year     - year of the date to convert
  749.  
  750.    RESULT
  751.     jd - This is the JD
  752.  
  753.    EXAMPLE
  754.     ...
  755.     jd := GregorianToJD(23,1,1994);
  756.     ...
  757.  
  758.    NOTES
  759.     It is better to use this function only from -7 to 3200!
  760.  
  761.    BUGS
  762.     unknown.
  763.  
  764.    SEE ALSO
  765.     JulianToJD(),HeisToJD(),GSYearToJD(),GYearToScaliger(),
  766.     GregorianDayDiff()
  767.  
  768. Date/GregorianWeek                                         Date/GregorianWeek
  769.  
  770.    NAME
  771.     GregorianWeek -- Gets the weeknumber of a specified date. (V33)
  772.  
  773.    SYNOPSIS
  774.     weeknr := GregorianWeek(day,month,year);
  775.  
  776.     PROCEDURE GregorianWeek(day,month : SHORTINT;
  777.         year : INTEGER) : SHORTINT;
  778.  
  779.    FUNCTION
  780.     GregorianWeek gets the weeknumber for a specified date.
  781.  
  782.    INPUTS
  783.     day   - day of the date
  784.     month - month of the date
  785.     year  - year of the date
  786.  
  787.    RESULT
  788.     week - This is the number of the week the specified date lies in.
  789.         If the first day in a new year is a Friday, Saturday or
  790.         Sunday, this would be the last week of the last year!
  791.         If the 29.12. is a Monday, the 30.12. is a Monday or a Tuesday,
  792.         the 31.12. is a Monday, Tuesday or a Wednesday this is the
  793.         first week of the next year!
  794.  
  795.    EXAMPLE
  796.     ...
  797.     weeknr := GregorianWeek(4,10,1582);
  798.     ...
  799.  
  800.    NOTES
  801.     It is better only to use this function for years from 0 to 3000!
  802.  
  803.    BUGS
  804.     For years < 0 errors could occur.
  805.  
  806.    SEE ALSO
  807.     JulianWeek(),HeisWeek(),GregorianWeekday(),GregorianDayDiff(),
  808.     GregorianDaySmaller()
  809.  
  810. Date/GregorianWeekday                                   Date/GregorianWeekday
  811.  
  812.    NAME
  813.     GregorianWeekday -- Gets the weekday of a specified date. (V33)
  814.  
  815.    SYNOPSIS
  816.     weekday := GregorianWeekday(day,month,year);
  817.  
  818.     PROCEDURE GregorianWeekday(day,month : SHORTINT;
  819.         year : INTEGER) : Weekday;
  820.  
  821.    FUNCTION
  822.     GregorianWeekday gets the weekday for a specified date.
  823.  
  824.    INPUTS
  825.     day   - day of the date
  826.     month - month of the date
  827.     year  - year of the date
  828.  
  829.    RESULT
  830.     weekday - This result is of type:
  831.         Weekdays = (dayerr,Monday,Tuesday,Wednesday,Thursday,Friday,
  832.         Saturday,Sunday);
  833.         dayerr will show you, that an error occurs!
  834.  
  835.    EXAMPLE
  836.     ...
  837.     weekday := GregorianWeekday(22,1,1994);
  838.     IF weekday = dayerr THEN
  839.     ...
  840.     END;
  841.     ...
  842.  
  843.    NOTES
  844.     It is better only to use this function for years from -7 to 3200!
  845.     In this version dayerr will only occur for the lost days :)
  846.  
  847.    BUGS
  848.     It's not possible to use years < 0 (for more see JulianWeekday()).
  849.  
  850.    SEE ALSO
  851.     JulianWeekday(),HeisWeekday(),GregorianDaySmaller(),
  852.     GregorianLeapYear()
  853.  
  854. Date/GregorianYearDays                                 Date/GregorianYearDays
  855.  
  856.    NAME
  857.     GregorianYearDays -- Gives back the number of days in a year. (V33)
  858.  
  859.    SYNOPSIS
  860.     days := GregorianYearDays(year);
  861.  
  862.     PROCEDURE GregorianYearDays(year : INTEGER) : INTEGER;
  863.  
  864.    FUNCTION
  865.     GregorianYearDays gives you back the number of days in
  866.     a specified year.
  867.  
  868.    INPUTS
  869.     year  - The year in which to count the days.
  870.         (I think its better not to use years before -7!)
  871.  
  872.    RESULT
  873.     days - The number of days the year uses.
  874.  
  875.    EXAMPLE
  876.     ...
  877.     days := GregorianYearDays(1994);
  878.     WriteString("Days of 1994 : ");
  879.     WriteCard(days,3); WriteLn;
  880.     ...
  881.  
  882.    NOTES
  883.     It is better only to use this function for years from -7 to 3200!
  884.  
  885.    BUGS
  886.     No known bugs.
  887.  
  888.    SEE ALSO
  889.     GregorianMonthDays(),JulianYearDays(),HeisYearDays()
  890.  
  891. Date/GSYearToJD                                               Date/GSYearToJD
  892.  
  893.    NAME
  894.     GSYearToJD -- Calcs the JD from a Scaliger year. (V33)
  895.  
  896.    SYNOPSIS
  897.     jd := GSYearToJD(syear);
  898.  
  899.     PROCEDURE GSYearToJD(syear : INTEGER) : LONGINT;
  900.  
  901.    FUNCTION
  902.     Returns the Julianday of a Scaliger year.
  903.  
  904.    INPUTS
  905.     syear     - Scaliger year
  906.  
  907.    RESULT
  908.     jd - The Julianday
  909.  
  910.    EXAMPLE
  911.     ...
  912.     jd := GSYearToJD(4800);
  913.     ...
  914.  
  915.    NOTES
  916.     It is better to use this function only from 4707 to 7981!
  917.  
  918.    BUGS
  919.     unknown.
  920.  
  921.    SEE ALSO
  922.     JSYearToJD(),HSYearToJD()
  923.  
  924. Date/GYearToScaliger                                     Date/GYearToScaliger
  925.  
  926.    NAME
  927.     GYearToScaliger -- Returns the year as Scaliger year. (V33)
  928.  
  929.    SYNOPSIS
  930.     syear := GYearToScaliger(year);
  931.  
  932.     PROCEDURE GYearToScaliger(year : INTEGER) : INTEGER;
  933.  
  934.    FUNCTION
  935.     Returns the Scaliger year.
  936.  
  937.    INPUTS
  938.     year     - Gregorian year
  939.  
  940.    RESULT
  941.     syear - The Scaliger year
  942.  
  943.    EXAMPLE
  944.     ...
  945.     syear := GYearToScaliger(1994);
  946.     ...
  947.  
  948.    NOTES
  949.     It is better to use this function only from -7 to 3200!
  950.  
  951.    BUGS
  952.     unknown.
  953.  
  954.    SEE ALSO
  955.     JYearToScaliger(),HYearToScaliger()
  956.  
  957. Date/HeisDayDiff                                             Date/HeisDayDiff
  958.  
  959.    NAME
  960.     HeisDayDiff -- Calculates the days between 2 dates. (V33)
  961.  
  962.    SYNOPSIS
  963.     days := HeisDayDiff(day1,month1,year1,day2,month2,year2);
  964.  
  965.     PROCEDURE HeisDayDiff(day1,month1 : SHORTINT; year1 : INTEGER;
  966.         day2,month2 : SHORTINT; year2 : INTEGER) : LONGINT;
  967.  
  968.    FUNCTION
  969.     HeisDayDiff gives you back the number of days between
  970.     two specified dates.
  971.  
  972.    INPUTS
  973.     day1   - day of the first date
  974.     month1 - month of the first date
  975.     year1  - year of the first date
  976.     day2   - day of the second date
  977.     month2 - month of the second month
  978.     year2  - year of the second date
  979.  
  980.    RESULT
  981.     days - The number of days between the two dates
  982.         (positive if date1 <= date2).
  983.  
  984.    EXAMPLE
  985.     ...
  986.     days := HeisDayDiff(18,9,1970,22,1,1994);
  987.     WriteString("Age of Kai Hofmann in days : ");
  988.     WriteInt(days,10); WriteLn;
  989.     ...
  990.  
  991.    NOTES
  992.     It is better only to use this function for years from -7 to 8000!
  993.  
  994.    BUGS
  995.     If you use on of the dates 5.10.1582 to 14.10.1582 you will get a
  996.     wrong output, because this days don't exist!
  997.  
  998.    SEE ALSO
  999.     JulianDayDiff(),GregorianDayDiff(),HeisDaySmaller(),HeisDayGreater(),
  1000.     HeisMonthDays(),HeisYearDays()
  1001.  
  1002. Date/HeisDayGreater                                       Date/HeisDayGreater
  1003.  
  1004.    NAME
  1005.     HeisDayGreater -- Checks if date1 is greater than date2. (V33)
  1006.  
  1007.    SYNOPSIS
  1008.     greater := HeisDayGreater(day1,month1,year1,day2,month2,year2);
  1009.  
  1010.     PROCEDURE HeisDayGreater(day1,month1 : SHORTINT; year1 : INTEGER;
  1011.         day2,month2 : SHORTINT; year2 : INTEGER) : BOOLEAN;
  1012.  
  1013.    FUNCTION
  1014.     HeisDayGreater test if date1 is great than date2.
  1015.  
  1016.    INPUTS
  1017.     day1   - day of the first date
  1018.     month1 - month of the first date
  1019.     year1  - year of the first date
  1020.     day2   - day of the second date
  1021.     month2 - month of the second month
  1022.     year2  - year of the second date
  1023.  
  1024.    RESULT
  1025.     greater - This is TRUE is date1 > date2 otherwise it's FALSE.
  1026.  
  1027.    EXAMPLE
  1028.     ...
  1029.     IF HeisDaySmaller(18,9,1970,22,1,1994) THEN
  1030.       WriteString(">"); WriteLn;
  1031.     ELSE
  1032.       WriteString("<="); WriteLn;
  1033.     END;
  1034.     ...
  1035.  
  1036.    NOTES
  1037.     It is better only to use this function for years from -7 to 8000!
  1038.  
  1039.    BUGS
  1040.     No known bugs.
  1041.  
  1042.    SEE ALSO
  1043.     JulianDayGreater(),GregorianDayGreater()
  1044.  
  1045. Date/HeisDaysAfterWeekday                           Date/HeisDaysAfterWeekday
  1046.  
  1047.    NAME
  1048.     HeisDaysAfterWeekday -- Returns the diff to the wday after. (V33)
  1049.  
  1050.    SYNOPSIS
  1051.     days := HeisDaysAfterWeekday(day,month,year,weekday);
  1052.  
  1053.     PROCEDURE HeisDaysAfterWeekday(day,month : SHORTINT;
  1054.         year : INTEGER; weekday : Weekdays) : SHORTINT;
  1055.  
  1056.    FUNCTION
  1057.     Returns the days to the weekday after the specified date.
  1058.     So if you specify the 22.1.1994 (Saturday) and Thursday
  1059.     you get back 5!
  1060.     If you specify the 22.1.1994 and Saturday you get back 0
  1061.     (the same day)!
  1062.  
  1063.    INPUTS
  1064.     day     - day of the date
  1065.     month   - month of the date
  1066.     year    - year of the date
  1067.     weekday - weekday to search for building difference
  1068.  
  1069.    RESULT
  1070.     days - The days after to the searched weekday.
  1071.  
  1072.    EXAMPLE
  1073.     ...
  1074.     days := HeisDaysAfterWeekday(22,1,1994,Thursday);
  1075.     ...
  1076.  
  1077.    NOTES
  1078.     It is better to use this function only from -7 to 8000!
  1079.  
  1080.    BUGS
  1081.     See HeisWeekday()!
  1082.  
  1083.    SEE ALSO
  1084.     JulianDaysAfterWeekday(),GregorianDaysAfterWeekday(),HeisWeekday()
  1085.  
  1086. Date/HeisDaysBeforeWeekday                         Date/HeisDaysBeforeWeekday
  1087.  
  1088.    NAME
  1089.     HeisDaysBeforeWeekday -- Returns the diff to wday before. (V33)
  1090.  
  1091.    SYNOPSIS
  1092.     days := HeisDaysBeforeWeekday(day,month,year,weekday);
  1093.  
  1094.     PROCEDURE HeisDaysBeforeWeekday(day,month : SHORTINT;
  1095.         year : INTEGER; weekday : Weekdays) : SHORTINT;
  1096.  
  1097.    FUNCTION
  1098.     Returns the days to the weekday before the specified date.
  1099.     So if you specify the 22.1.1994 (Saturday) and Thursday
  1100.     you get back 2!
  1101.     If you specify the 22.1.1994 and Saturday you get back 0
  1102.     (the same day)!
  1103.  
  1104.    INPUTS
  1105.     day     - day of the date
  1106.     month   - month of the date
  1107.     year    - year of the date
  1108.     weekday - weekday to search for building difference
  1109.  
  1110.    RESULT
  1111.     days - The days back to the searched weekday (1-7)
  1112.         If you get back 8 an error occurs!
  1113.  
  1114.    EXAMPLE
  1115.     ...
  1116.     days := HeisDaysBeforeWeekday(22,1,1994,Thursday);
  1117.     ...
  1118.  
  1119.    NOTES
  1120.     It is better to use this function only from -7 to 8000!
  1121.  
  1122.    BUGS
  1123.     See HeisWeekday()!
  1124.  
  1125.    SEE ALSO
  1126.     JulianDaysBeforeWeekday(),GregorianDaysBeforeWeekday(),HeisWeekday()
  1127.  
  1128. Date/HeisDaySmaller                                       Date/HeisDaySmaller
  1129.  
  1130.    NAME
  1131.     HeisDaySmaller -- Checks if date1 is smaller than date2. (V33)
  1132.  
  1133.    SYNOPSIS
  1134.     smaller := HeisDaySmaller(day1,month1,year1,day2,month2,year2);
  1135.  
  1136.     PROCEDURE HeisDaySmaller(day1,month1 : SHORTINT; year1 : INTEGER;
  1137.         day2,month2 : SHORTINT; year2 : INTEGER) : BOOLEAN;
  1138.  
  1139.    FUNCTION
  1140.     HeisDaySmaller test if date1 is smaller than date2.
  1141.  
  1142.    INPUTS
  1143.     day1   - day of the first date
  1144.     month1 - month of the first date
  1145.     year1  - year of the first date
  1146.     day2   - day of the second date
  1147.     month2 - month of the second month
  1148.     year2  - year of the second date
  1149.  
  1150.    RESULT
  1151.     smaller - This is TRUE is date1 < date2 otherwise it's FALSE.
  1152.  
  1153.    EXAMPLE
  1154.     ...
  1155.     IF HeisDaySmaller(18,9,1970,22,1,1994) THEN
  1156.       WriteString("<"); WriteLn;
  1157.     ELSE
  1158.       WriteString(">="); WriteLn;
  1159.     END;
  1160.     ...
  1161.  
  1162.    NOTES
  1163.     It is better only to use this function for years from -7 to 8000!
  1164.  
  1165.    BUGS
  1166.     No known bugs.
  1167.  
  1168.    SEE ALSO
  1169.     JulianDaySmaller(),GregorianDaySmaller()
  1170.  
  1171. Date/HeisDiffDate                                           Date/HeisDiffDate
  1172.  
  1173.    NAME
  1174.     HeisDiffDate -- Returns the date for a diff to another date. (V33)
  1175.  
  1176.    SYNOPSIS
  1177.     HeisDiffDate(day,month,year,diffdays,dday,dmonth,dyear);
  1178.  
  1179.     PROCEDURE HeisDiffDate(day,month : SHORTINT; year,days : INTEGER;
  1180.          VAR dday,dmonth : SHORTINT; VAR dyear : INTEGER);
  1181.  
  1182.    FUNCTION
  1183.     Returns the date wich lies diffdays before/after the specified date.
  1184.  
  1185.    INPUTS
  1186.     day      - day of the date
  1187.     month    - month of the date
  1188.     year     - year of the date
  1189.     diffdays - difference to the date in days
  1190.  
  1191.    RESULT
  1192.     dday   - Destination day
  1193.     dmonth - Destination month
  1194.     dyear  - Destination year
  1195.  
  1196.    EXAMPLE
  1197.     ...
  1198.     HeisDiffDate(23,1,1994,7,dday,dmonth,dyear);
  1199.     ...
  1200.  
  1201.    NOTES
  1202.     It is better to use this function only from -7 to 8000!
  1203.  
  1204.    BUGS
  1205.     unknown.
  1206.  
  1207.    SEE ALSO
  1208.     JuliandiffDate(),GregorianDiffdate(),HeisDayDiff(),HeisMonthDays()
  1209.  
  1210. Date/HeisLeapYear                                           Date/HeisLeapYear
  1211.  
  1212.    NAME
  1213.     HeisLeapYear -- Checks if a year is a leap year. (V33)
  1214.  
  1215.    SYNOPSIS
  1216.     leapyear := HeisLeapYear(year);
  1217.  
  1218.     PROCEDURE HeisLeapYear(year : INTEGER) : BOOLEAN;
  1219.  
  1220.    FUNCTION
  1221.     HeisLeapYear checks if a year is a leap year.
  1222.     For years after 1582 see GregorianLeapYear(),
  1223.     The correction from N. Heis says, that all years devideable by
  1224.     3200 are no longer leap years!
  1225.     For years before 1582 see JulianLeapYear
  1226.  
  1227.    INPUTS
  1228.     year - The year which should be checked (from -32768 to 32767)
  1229.         I think only values from -7 to 8000 are valid, because of
  1230.         the variant that was done on -8 by Augustus!
  1231.  
  1232.    RESULT
  1233.     leapyear - TRUE if the year is a leap year, otherwise false.
  1234.  
  1235.    EXAMPLE
  1236.     ...
  1237.     IF HeisLeapYear(1994) THEN
  1238.       WriteString("leap year!");
  1239.     ELSE
  1240.       WriteString("no leap year!");
  1241.     END;
  1242.     WriteLn;
  1243.     ...
  1244.  
  1245.    NOTES
  1246.     A year is now 365.2421875 days!
  1247.     Use this function only for values from -7 to 8000!
  1248.  
  1249.    BUGS
  1250.     No known bugs.
  1251.  
  1252.    SEE ALSO
  1253.     JulianLeapYear(),GregorianLeapYear()
  1254.  
  1255. Date/HeisMonthDays                                         Date/HeisMonthDays
  1256.  
  1257.    NAME
  1258.     HeisMonthDays -- Gives back the number of days of a month. (V33)
  1259.  
  1260.    SYNOPSIS
  1261.     days := HeisMonthDays(month,year);
  1262.  
  1263.     PROCEDURE HeisMonthDays(month : SHORTINT;
  1264.         year : INTEGER) : SHORTINT;
  1265.  
  1266.    FUNCTION
  1267.     HeisMonthDays gives you back the number of days a month in
  1268.     a specified year has.
  1269.     For the year 1582 and the month 10 there are only 21 days,
  1270.     because of the Gregorian-reform 10 days are delete from
  1271.     the month (for more - look out for books about this!)
  1272.  
  1273.    INPUTS
  1274.     month - The month from wich you want to get the number of days.
  1275.     year  - The year in which the month is.
  1276.  
  1277.    RESULT
  1278.     days - The number of days the month uses, or 0 if you use
  1279.         a wrong month.
  1280.  
  1281.    EXAMPLE
  1282.     ...
  1283.     days := HeisMonthDays(1,1994);
  1284.     WriteString("Days of January 1994 : ");
  1285.     WriteCard(days,2); WriteLn;
  1286.     ...
  1287.  
  1288.    NOTES
  1289.     Use this function only for years from -7 to 8000!
  1290.  
  1291.    BUGS
  1292.     See GregorianMonthDays!
  1293.  
  1294.    SEE ALSO
  1295.     HeisLeapYear(),JulianMonthDays(),GregorianMonthDays()
  1296.  
  1297. Date/HeisToJD                                                   Date/HeisToJD
  1298.  
  1299.    NAME
  1300.     HeisToJD -- Returns the JD for a date. (V33)
  1301.  
  1302.    SYNOPSIS
  1303.     jd := HeisToJD(day,month,year);
  1304.  
  1305.     PROCEDURE HeisToJD(day,month : SHORTINT;
  1306.         year : INTEGER) : LONGINT;
  1307.  
  1308.    FUNCTION
  1309.     Returns the JD for a Heis date.
  1310.  
  1311.    INPUTS
  1312.     day      - day of the date to convert
  1313.     month    - month of the date to convert
  1314.     year     - year of the date to convert
  1315.  
  1316.    RESULT
  1317.     jd - This is the JD
  1318.  
  1319.    EXAMPLE
  1320.     ...
  1321.     jd := HeisToJD(23,1,1994);
  1322.     ...
  1323.  
  1324.    NOTES
  1325.     It is better to use this function only from -7 to 3268!
  1326.  
  1327.    BUGS
  1328.     unknown.
  1329.  
  1330.    SEE ALSO
  1331.     JulianToJD(),GregorianToJD(),HSYearToJD(),HYearToScaliger(),
  1332.     HeisDayDiff()
  1333.  
  1334. Date/HeisWeek                                                   Date/HeisWeek
  1335.  
  1336.    NAME
  1337.     HeisWeek -- Gets the weeknumber of a specified date. (V33)
  1338.  
  1339.    SYNOPSIS
  1340.     weeknr := HeisWeek(day,month,year);
  1341.  
  1342.     PROCEDURE HeisWeek(day,month : SHORTINT;
  1343.         year : INTEGER) : SHORTINT;
  1344.  
  1345.    FUNCTION
  1346.     HeisWeek gets the weeknumber for a specified date.
  1347.  
  1348.    INPUTS
  1349.     day   - day of the date
  1350.     month - month of the date
  1351.     year  - year of the date
  1352.  
  1353.    RESULT
  1354.     week - This is the number of the week the specified date lies in.
  1355.         If the first day in a new year is a Friday, Saturday or
  1356.         Sunday, this would be the last week of the last year!
  1357.         If the 29.12. is a Monday, the 30.12. is a Monday or a Tuesday,
  1358.         the 31.12. is a Monday, Tuesday or a Wednesday this is the
  1359.         first week of the next year!
  1360.  
  1361.    EXAMPLE
  1362.     ...
  1363.     weeknr := HeisWeek(4,10,1582);
  1364.     ...
  1365.  
  1366.    NOTES
  1367.     It is better only to use this function for years from 0 to 8000!
  1368.  
  1369.    BUGS
  1370.     For years < 0 errors could occur.
  1371.  
  1372.    SEE ALSO
  1373.     JulianWeek(),GregorianWeek(),HeisWeekday(),HeisDayDiff(),
  1374.     HeisDaySmaller()
  1375.  
  1376. Date/HeisWeekday                                             Date/HeisWeekday
  1377.  
  1378.    NAME
  1379.     HeisWeekday -- Gets the weekday of a specified date. (V33)
  1380.  
  1381.    SYNOPSIS
  1382.     weekday := HeisWeekday(day,month,year);
  1383.  
  1384.     PROCEDURE HeisWeekday(day,month : SHORTINT;
  1385.         year : INTEGER) : Weekday;
  1386.  
  1387.    FUNCTION
  1388.     HeisWeekday gets the weekday for a specified date.
  1389.  
  1390.    INPUTS
  1391.     day   - day of the date
  1392.     month - month of the date
  1393.     year  - year of the date
  1394.  
  1395.    RESULT
  1396.     weekday - This result is of type:
  1397.         Weekdays = (dayerr,Monday,Tuesday,Wednesday,Thursday,Friday,
  1398.         Saturday,Sunday);
  1399.         dayerr will show you, that an error occurs!
  1400.  
  1401.    EXAMPLE
  1402.     ...
  1403.     weekday := HeisWeekday(22,1,1994);
  1404.     IF weekday = dayerr THEN
  1405.     ...
  1406.     END;
  1407.     ...
  1408.  
  1409.    NOTES
  1410.     It is better only to use this function for years from -7 to 8000!
  1411.     In this version dayerr will only occur for the lost days :)
  1412.  
  1413.    BUGS
  1414.     It is not possible to use year < 0 (see JulianWeekday() for more).
  1415.  
  1416.    SEE ALSO
  1417.     JulianWeekday(),GregorianWeekday(),HeisDaySmaller(),HeisLeapYear()
  1418.  
  1419. Date/HeisYearDays                                           Date/HeisYearDays
  1420.  
  1421.    NAME
  1422.     HeisYearDays -- Gives back the number of days in a year. (V33)
  1423.  
  1424.    SYNOPSIS
  1425.     days := HeisYearDays(year);
  1426.  
  1427.     PROCEDURE HeisYearDays(year : INTEGER) : INTEGER;
  1428.  
  1429.    FUNCTION
  1430.     HeisYearDays gives you back the number of days in
  1431.     a specified year.
  1432.  
  1433.    INPUTS
  1434.     year  - The year in which to count the days.
  1435.         (I think its better not to use years before -7!)
  1436.  
  1437.    RESULT
  1438.     days - The number of days the year uses.
  1439.  
  1440.    EXAMPLE
  1441.     ...
  1442.     days := HeisYearDays(1994);
  1443.     WriteString("Days of 1994 : ");
  1444.     WriteCard(days,3); WriteLn;
  1445.     ...
  1446.  
  1447.    NOTES
  1448.     It is better only to use this function for years from -7 to 8000!
  1449.  
  1450.    BUGS
  1451.     No known bugs.
  1452.  
  1453.    SEE ALSO
  1454.     HeisMonthDays(),JulianYearDays(),GregorianYearDays()
  1455.  
  1456. Date/HSYearToJD                                               Date/HSYearToJD
  1457.  
  1458.    NAME
  1459.     HSYearToJD -- Calcs the JD from a Scaliger year. (V33)
  1460.  
  1461.    SYNOPSIS
  1462.     jd := HSYearToJD(syear);
  1463.  
  1464.     PROCEDURE HSYearToJD(syear : INTEGER) : LONGINT;
  1465.  
  1466.    FUNCTION
  1467.     Returns the Julianday of a Scaliger year.
  1468.  
  1469.    INPUTS
  1470.     syear     - Scaliger year
  1471.  
  1472.    RESULT
  1473.     jd - The Julianday
  1474.  
  1475.    EXAMPLE
  1476.     ...
  1477.     jd := HSYearToJD(6700);
  1478.     ...
  1479.  
  1480.    NOTES
  1481.     It is better to use this function only from 4707 to 7981!
  1482.     In this version only GSYearToJD() is called, because the
  1483.     Scaliger period is only valid to 3268
  1484.  
  1485.    BUGS
  1486.     unknown.
  1487.  
  1488.    SEE ALSO
  1489.     JSYearToJD(),GSYearToJD()
  1490.  
  1491. Date/HYearToScaliger                                     Date/HYearToScaliger
  1492.  
  1493.    NAME
  1494.     HYearToScaliger -- Returns the year as Scaliger year. (V33)
  1495.  
  1496.    SYNOPSIS
  1497.     syear := HYearToScaliger(year);
  1498.  
  1499.     PROCEDURE HYearToScaliger(year : INTEGER) : INTEGER;
  1500.  
  1501.    FUNCTION
  1502.     Returns the Scaliger year.
  1503.  
  1504.    INPUTS
  1505.     year     - Heis year
  1506.  
  1507.    RESULT
  1508.     syear - The Scaliger year
  1509.  
  1510.    EXAMPLE
  1511.     ...
  1512.     syear := HYearToScaliger(1994);
  1513.     ...
  1514.  
  1515.    NOTES
  1516.     It is better to use this function only from -7 to 8000!
  1517.  
  1518.    BUGS
  1519.     The Scaliger period is defined to 3268!!!.
  1520.  
  1521.    SEE ALSO
  1522.     JYearToScaliger(),GYearToScaliger()
  1523.  
  1524. Date/JDtoMJD                                                     Date/JDtoMJD
  1525.  
  1526.    NAME
  1527.     JDtoMJD -- Switches from JD to MJD. (V33)
  1528.  
  1529.    SYNOPSIS
  1530.     mjd := JDtoMJD(jd);
  1531.  
  1532.     PROCEDURE JDtoMJD(jd : LONGINT) : LONGINT;
  1533.  
  1534.    FUNCTION
  1535.     Returns the Modified Julianday of a Julianday.
  1536.  
  1537.    INPUTS
  1538.     jd - Julianday
  1539.  
  1540.    RESULT
  1541.     mjd - The Modified Julianday
  1542.  
  1543.    EXAMPLE
  1544.     ...
  1545.     mjd := JDtoMJD(2449354);
  1546.     ...
  1547.  
  1548.    NOTES
  1549.     none
  1550.  
  1551.    BUGS
  1552.     Only use this function for jd > 2400001, because mjd is only
  1553.     defined for this, otherwise system will crash!
  1554.  
  1555.    SEE ALSO
  1556.     MJDtoJD()
  1557.  
  1558. Date/JDToTime                                                   Date/JDToTime
  1559.  
  1560.    NAME
  1561.     JDToTime -- Returns the real time for a JD time. (V33)
  1562.  
  1563.    SYNOPSIS
  1564.     JDToTime(jd,rhour,rmin,rsec);
  1565.  
  1566.     PROCEDURE JDToTime(jd : REAL; VAR rhour,rmin,rsec : SHORTINT);
  1567.  
  1568.    FUNCTION
  1569.     Returns the real time for a JD time.
  1570.  
  1571.    INPUTS
  1572.     jd - JD time
  1573.  
  1574.    RESULT
  1575.     rhour - 24 hour real time
  1576.     rmin  - real minutes
  1577.     rsec  - real seconds
  1578.  
  1579.    EXAMPLE
  1580.     ...
  1581.     JDToTime(0.76543,rhour,rmin,rsec);
  1582.     ...
  1583.  
  1584.    NOTES
  1585.     none.
  1586.  
  1587.    BUGS
  1588.     If jd is > 0 (including days) there will be occur arithmetic bugs!
  1589.  
  1590.    SEE ALSO
  1591.     TimeToJD()
  1592.  
  1593. Date/JSYearToJD                                               Date/JSYearToJD
  1594.  
  1595.    NAME
  1596.     JSYearToJD -- Calcs the JD from a Scaliger year. (V33)
  1597.  
  1598.    SYNOPSIS
  1599.     jd := JSYearToJD(syear);
  1600.  
  1601.     PROCEDURE JSYearToJD(syear : INTEGER) : LONGINT;
  1602.  
  1603.    FUNCTION
  1604.     Returns the Julianday of a Scaliger year.
  1605.  
  1606.    INPUTS
  1607.     syear     - Scaliger year
  1608.  
  1609.    RESULT
  1610.     jd - The Julianday
  1611.  
  1612.    EXAMPLE
  1613.     ...
  1614.     jd := JSYearToJD(4800);
  1615.     ...
  1616.  
  1617.    NOTES
  1618.     It is better to use this function only from 4707 to 6295!
  1619.  
  1620.    BUGS
  1621.     unknown.
  1622.  
  1623.    SEE ALSO
  1624.     GSYearToJD(),HSYearToJD()
  1625.  
  1626. Date/JulianDayDiff                                         Date/JulianDayDiff
  1627.  
  1628.    NAME
  1629.     JulianDayDiff -- Calculates the days between 2 dates. (V33)
  1630.  
  1631.    SYNOPSIS
  1632.     days := JulianDayDiff(day1,month1,year1,day2,month2,year2);
  1633.  
  1634.     PROCEDURE JulianDayDiff(day1,month1 : SHORTINT; year1 : INTEGER;
  1635.         day2,month2 : SHORTINT; year2 : INTEGER) : LONGINT;
  1636.  
  1637.    FUNCTION
  1638.     JulianDayDiff gives you back the number of days between
  1639.     two specified dates.
  1640.  
  1641.    INPUTS
  1642.     day1   - day of the first date
  1643.     month1 - month of the first date
  1644.     year1  - year of the first date
  1645.     day2   - day of the second date
  1646.     month2 - month of the second month
  1647.     year2  - year of the second date
  1648.  
  1649.    RESULT
  1650.     days - The number of days between the two dates
  1651.         (positive if date1 <= date2).
  1652.  
  1653.    EXAMPLE
  1654.     ...
  1655.     days := JulianDayDiff(18,9,1970,22,1,1994);
  1656.     WriteString("Age of Kai Hofmann in days : ");
  1657.     WriteInt(days,10); WriteLn;
  1658.     ...
  1659.  
  1660.    NOTES
  1661.     It is better only to use this function for years from -7 to 1582!
  1662.  
  1663.    BUGS
  1664.     No known bugs.
  1665.  
  1666.    SEE ALSO
  1667.     GregorianDayDiff(),HeisDayDiff(),JulianMonthDays(),JulianYearDays()
  1668.  
  1669. Date/JulianDayGreater                                   Date/JulianDayGreater
  1670.  
  1671.    NAME
  1672.     JulianDayGreater -- Checks if date1 is greater than date2. (V33)
  1673.  
  1674.    SYNOPSIS
  1675.     greater := JulianDayGreater(day1,month1,year1,day2,month2,year2);
  1676.  
  1677.     PROCEDURE JulianDayGreater(day1,month1 : SHORTINT; year1 : INTEGER;
  1678.         day2,month2 : SHORTINT; year2 : INTEGER) : BOOLEAN;
  1679.  
  1680.    FUNCTION
  1681.     JulianDayGreater test if date1 is greater than date2.
  1682.  
  1683.    INPUTS
  1684.     day1   - day of the first date
  1685.     month1 - month of the first date
  1686.     year1  - year of the first date
  1687.     day2   - day of the second date
  1688.     month2 - month of the second month
  1689.     year2  - year of the second date
  1690.  
  1691.    RESULT
  1692.     greater - This is TRUE is date1 > date2 otherwise it's FALSE.
  1693.  
  1694.    EXAMPLE
  1695.     ...
  1696.     IF JulianDayGreater(18,9,1970,22,1,1994) THEN
  1697.       WriteString(">"); WriteLn;
  1698.     ELSE
  1699.       WriteString("<="); WriteLn;
  1700.     END;
  1701.     ...
  1702.  
  1703.    NOTES
  1704.     It is better only to use this function for years from -7 to 1582!
  1705.  
  1706.    BUGS
  1707.     No known bugs.
  1708.  
  1709.    SEE ALSO
  1710.     GregorianDayGreater(),HeisDayGreater()
  1711.  
  1712. Date/JulianDaysAfterWeekday                       Date/JulianDaysAfterWeekday
  1713.  
  1714.    NAME
  1715.     JulianDaysAfterWeekday -- Returns the diff to the wday after. (V33)
  1716.  
  1717.    SYNOPSIS
  1718.     days := JulianDaysAfterWeekday(day,month,year,weekday);
  1719.  
  1720.     PROCEDURE JulianDaysAfterWeekday(day,month : SHORTINT;
  1721.         year : INTEGER; weekday : Weekdays) : SHORTINT;
  1722.  
  1723.    FUNCTION
  1724.     Returns the days to the weekday after the specified date.
  1725.     So if you specify the 22.1.1994 (Saturday) and Thursday
  1726.     you get back 5!
  1727.     If you specify the 22.1.1994 and Saturday you get back 0
  1728.     (the same day)!
  1729.  
  1730.    INPUTS
  1731.     day     - day of the date
  1732.     month   - month of the date
  1733.     year    - year of the date
  1734.     weekday - weekday to search for building difference
  1735.  
  1736.    RESULT
  1737.     days - The days after to the searched weekday.
  1738.  
  1739.    EXAMPLE
  1740.     ...
  1741.     days := JulianDaysAfterWeekday(22,1,1994,Thursday);
  1742.     ...
  1743.  
  1744.    NOTES
  1745.     It is better to use this function only from -7 to 1582!
  1746.  
  1747.    BUGS
  1748.     See JulianWeekday()!
  1749.  
  1750.    SEE ALSO
  1751.     GregorianDaysAfterWeekday(),HeisDaysAfterWeekday(),JulianWeekday()
  1752.  
  1753. Date/JulianDaysBeforeWeekday                     Date/JulianDaysBeforeWeekday
  1754.  
  1755.    NAME
  1756.     JulianDaysBeforeWeekday -- Returns the diff to the wday before. (V33)
  1757.  
  1758.    SYNOPSIS
  1759.     days := JulianDaysBeforeWeekday(day,month,year,weekday);
  1760.  
  1761.     PROCEDURE JulianDaysBeforeWeekday(day,month : SHORTINT;
  1762.         year : INTEGER; weekday : Weekdays) : SHORTINT;
  1763.  
  1764.    FUNCTION
  1765.     Returns the days to the weekday before the specified date.
  1766.     So if you specify the 22.1.1994 (Saturday) and Thursday
  1767.     you get back 2!
  1768.     If you specify the 22.1.1994 and Saturday you get back 0
  1769.     (the same day)!
  1770.  
  1771.    INPUTS
  1772.     day     - day of the date
  1773.     month   - month of the date
  1774.     year    - year of the date
  1775.     weekday - weekday to search for building difference
  1776.  
  1777.    RESULT
  1778.     days - The days back to the searched weekday (0-6)
  1779.         If you get back 8 an error occurs!
  1780.  
  1781.    EXAMPLE
  1782.     ...
  1783.     days := JulianDaysBeforeWeekday(22,1,1994,Thursday);
  1784.     ...
  1785.  
  1786.    NOTES
  1787.     It is better to use this function only from -7 to 1582!
  1788.  
  1789.    BUGS
  1790.     See JulianWeekday()!
  1791.  
  1792.    SEE ALSO
  1793.     GregorianDaysBeforeWeekday(),HeisDaysBeforeWeekday(),JulianWeekday()
  1794.  
  1795. Date/JulianDaySmaller                                   Date/JulianDaySmaller
  1796.  
  1797.    NAME
  1798.     JulianDaySmaller -- Checks if date1 is smaller than date2. (V33)
  1799.  
  1800.    SYNOPSIS
  1801.     smaller := JulianDaySmaller(day1,month1,year1,day2,month2,year2);
  1802.  
  1803.     PROCEDURE JulianDaySmaller(day1,month1 : SHORTINT; year1 : INTEGER;
  1804.         day2,month2 : SHORTINT; year2 : INTEGER) : BOOLEAN;
  1805.  
  1806.    FUNCTION
  1807.     JulianDaySmaller test if date1 is smaller than date2.
  1808.  
  1809.    INPUTS
  1810.     day1   - day of the first date
  1811.     month1 - month of the first date
  1812.     year1  - year of the first date
  1813.     day2   - day of the second date
  1814.     month2 - month of the second month
  1815.     year2  - year of the second date
  1816.  
  1817.    RESULT
  1818.     smaller - This is TRUE is date1 < date2 otherwise it's FALSE.
  1819.  
  1820.    EXAMPLE
  1821.     ...
  1822.     IF JulianDaySmaller(18,9,1970,22,1,1994) THEN
  1823.       WriteString("<"); WriteLn;
  1824.     ELSE
  1825.       WriteString(">="); WriteLn;
  1826.     END;
  1827.     ...
  1828.  
  1829.    NOTES
  1830.     It is better only to use this function for years from -7 to 1582!
  1831.  
  1832.    BUGS
  1833.     No known bugs.
  1834.  
  1835.    SEE ALSO
  1836.     GregorianDaySmaller(),HeisDaySmaller()
  1837.  
  1838. Date/JulianDiffDate                                       Date/JulianDiffDate
  1839.  
  1840.    NAME
  1841.     JulianDiffDate -- Returns the date for a diff to another date. (V33)
  1842.  
  1843.    SYNOPSIS
  1844.     JulianDiffDate(day,month,year,diffdays,dday,dmonth,dyear);
  1845.  
  1846.     PROCEDURE JulianDiffDate(day,month : SHORTINT; year,days : INTEGER;
  1847.         VAR dday,dmonth : SHORTINT; VAR dyear : INTEGER);
  1848.  
  1849.    FUNCTION
  1850.     Returns the date wich lies diffdays before/after the specified date.
  1851.  
  1852.    INPUTS
  1853.     day      - day of the date
  1854.     month    - month of the date
  1855.     year     - year of the date
  1856.     diffdays - difference to the date in days
  1857.  
  1858.    RESULT
  1859.     dday   - Destination day
  1860.     dmonth - Destination month
  1861.     dyear  - Destination year
  1862.  
  1863.    EXAMPLE
  1864.     ...
  1865.     JulianDiffDate(23,1,1994,7,dday,dmonth,dyear);
  1866.     ...
  1867.  
  1868.    NOTES
  1869.     It is better to use this function only from -7 to 1582!
  1870.  
  1871.    BUGS
  1872.     unknown.
  1873.  
  1874.    SEE ALSO
  1875.     GregorianDiffDate(),HeisDiffDate(),JulianDayDiff(),JulianMonthDays()
  1876.  
  1877. Date/JulianLeapYear                                       Date/JulianLeapYear
  1878.  
  1879.    NAME
  1880.     JulianLeapYear -- Checks if a year is a leap year for jj. (V33)
  1881.  
  1882.    SYNOPSIS
  1883.     leapyear := JulianLeapYear(year);
  1884.  
  1885.     PROCEDURE JulianLeapYear(year : INTEGER) : BOOLEAN;
  1886.  
  1887.    FUNCTION
  1888.     JulianLeapYear checks if a year is a leap year in the julian calendar
  1889.     For years after Chr. it checks if the year is devideable by 4.
  1890.     For years before Chr. a leap year must have a modulo 4 value of 1
  1891.  
  1892.    INPUTS
  1893.     year - The year which should be checked (from -32768 to 32767)
  1894.         I think only values from -7 to 1582 are valid, because of
  1895.         the variant that was done on -8 by Augustus!
  1896.  
  1897.    RESULT
  1898.     leapyear - TRUE if the year is a leap year, otherwise false.
  1899.  
  1900.    EXAMPLE
  1901.     ...
  1902.     IF JulianLeapYear(1994) THEN
  1903.       WriteString("leap year!");
  1904.     ELSE
  1905.       WriteString("no leap year!");
  1906.     END;
  1907.     WriteLn;
  1908.     ...
  1909.  
  1910.    NOTES
  1911.     A year is 365.25 days long!
  1912.     Use this function only for values from -7 to 1582!
  1913.  
  1914.    BUGS
  1915.     No known bugs.
  1916.  
  1917.    SEE ALSO
  1918.     GregorianLeapYear(),HeisLeapYear()
  1919.  
  1920. Date/JulianMonthDays                                     Date/JulianMonthDays
  1921.  
  1922.    NAME
  1923.     JulianMonthDays -- Gives back the number of days of a month. (V33)
  1924.  
  1925.    SYNOPSIS
  1926.     days := JulianMonthDays(month,year);
  1927.  
  1928.     PROCEDURE JulianMonthDays(month : SHORTINT;
  1929.         year : INTEGER) : SHORTINT;
  1930.  
  1931.    FUNCTION
  1932.     JulianMonthDays gives you back the number of days a month in
  1933.     a specified year has.
  1934.  
  1935.    INPUTS
  1936.     month - The month from wich you want to get the number of days.
  1937.     year  - The year in which the month is.
  1938.  
  1939.    RESULT
  1940.     days - The number of days the month uses, or 0 if you use
  1941.         a wrong month.
  1942.  
  1943.    EXAMPLE
  1944.     ...
  1945.     days := JulianMonthDays(1,1994);
  1946.     WriteString("Days of January 1994 : ");
  1947.     WriteCard(days,2); WriteLn;
  1948.     ...
  1949.  
  1950.    NOTES
  1951.     It is better only to use this function for years from -7 to 1582!
  1952.  
  1953.    BUGS
  1954.     No known bugs.
  1955.  
  1956.    SEE ALSO
  1957.     JulianLeapYear(),GregorianMonthDays(),HeisMonthDays()
  1958.  
  1959. Date/JulianToJD                                               Date/JulianToJD
  1960.  
  1961.    NAME
  1962.     JulianToJD -- Returns the JD for a date. (V33)
  1963.  
  1964.    SYNOPSIS
  1965.     jd := JulianToJD(day,month,year);
  1966.  
  1967.     PROCEDURE JulianToJD(day,month : SHORTINT;
  1968.         year : INTEGER) : LONGINT;
  1969.  
  1970.    FUNCTION
  1971.     Returns the JD for a Julian date.
  1972.  
  1973.    INPUTS
  1974.     day      - day of the date to convert
  1975.     month    - month of the date to convert
  1976.     year     - year of the date to convert
  1977.  
  1978.    RESULT
  1979.     jd - This is the JD
  1980.  
  1981.    EXAMPLE
  1982.     ...
  1983.     jd := JulianToJD(23,1,1994);
  1984.     ...
  1985.  
  1986.    NOTES
  1987.     It is better to use this function only from -7 to 1582!
  1988.  
  1989.    BUGS
  1990.     unknown.
  1991.  
  1992.    SEE ALSO
  1993.     GregorianToJD(),HeisToJD(),JSYearToJD(),JYearToScaliger(),
  1994.     JulianDayDiff()
  1995.  
  1996. Date/JulianWeek                                               Date/JulianWeek
  1997.  
  1998.    NAME
  1999.     JulianWeek -- Gets the weeknumber of a specified date. (V33)
  2000.  
  2001.    SYNOPSIS
  2002.     weeknr := JulianWeek(day,month,year);
  2003.  
  2004.     PROCEDURE JulianWeek(day,month : SHORTINT;
  2005.         year : INTEGER) : SHORTINT;
  2006.  
  2007.    FUNCTION
  2008.     JulianWeek gets the weeknumber for a specified date.
  2009.  
  2010.    INPUTS
  2011.     day   - day of the date
  2012.     month - month of the date
  2013.     year  - year of the date
  2014.  
  2015.    RESULT
  2016.     week - This is the number of the week the specified date lies in.
  2017.         If the first day in a new year is a Friday, Saturday or
  2018.         Sunday, this would be the last week of the last year!
  2019.         If the 29.12. is a Monday, the 30.12. is a Monday or a Tuesday,
  2020.         the 31.12. is a Monday, Tuesday or a Wednesday this is the
  2021.         first week of the next year!
  2022.  
  2023.    EXAMPLE
  2024.     ...
  2025.     weeknr := JulianWeek(4,10,1582);
  2026.     ...
  2027.  
  2028.    NOTES
  2029.     It is better only to use this function for years from 0 to 1582!
  2030.  
  2031.    BUGS
  2032.     For years < 0 errors could occur.
  2033.  
  2034.    SEE ALSO
  2035.     GregorianWeek(),HeisWeek(),JulianWeekday(),JulianDayDiff(),
  2036.     JulianDaySmaller()
  2037.  
  2038. Date/JulianWeekday                                         Date/JulianWeekday
  2039.  
  2040.    NAME
  2041.     JulianWeekday -- Gets the weekday of a specified date. (V33)
  2042.  
  2043.    SYNOPSIS
  2044.     weekday := JulianWeekday(day,month,year);
  2045.  
  2046.     PROCEDURE JulianWeekday(day,month : SHORTINT;
  2047.         year : INTEGER) : Weekday;
  2048.  
  2049.    FUNCTION
  2050.     JulianWeekday gets the weekday for a specified date.
  2051.  
  2052.    INPUTS
  2053.     day   - day of the date
  2054.     month - month of the date
  2055.     year  - year of the date
  2056.  
  2057.    RESULT
  2058.     weekday - This result is of type:
  2059.         Weekdays = (dayerr,Monday,Tuesday,Wednesday,Thursday,Friday,
  2060.         Saturday,Sunday);
  2061.         dayerr will show you, that an error occurs!
  2062.  
  2063.    EXAMPLE
  2064.     ...
  2065.     weekday := JulianWeekday(4,10,1582);
  2066.     IF weekday = dayerr THEN
  2067.     ...
  2068.     END;
  2069.     ...
  2070.  
  2071.    NOTES
  2072.     It is better only to use this function for years from 0 to 1582!
  2073.     In this version no dayerr will occur!
  2074.  
  2075.    BUGS
  2076.     For years < 0 errors could occur, or systemcrashs(?).
  2077.  
  2078.    SEE ALSO
  2079.     GregorianWeekday(),HeisWeekday()
  2080.  
  2081. Date/JulianYearDays                                       Date/JulianYearDays
  2082.  
  2083.    NAME
  2084.     JulianYearDays -- Gives back the number of days in a year. (V33)
  2085.  
  2086.    SYNOPSIS
  2087.     days := JulianYearDays(year);
  2088.  
  2089.     PROCEDURE JulianYearDays(year : INTEGER) : INTEGER;
  2090.  
  2091.    FUNCTION
  2092.     JulianYearDays gives you back the number of days in
  2093.     a specified year.
  2094.  
  2095.    INPUTS
  2096.     year  - The year in which to count the days.
  2097.  
  2098.    RESULT
  2099.     days - The number of days the year uses.
  2100.  
  2101.    EXAMPLE
  2102.     ...
  2103.     days := JulianYearDays(1994);
  2104.     WriteString("Days of 1994 : ");
  2105.     WriteCard(days,3); WriteLn;
  2106.     ...
  2107.  
  2108.    NOTES
  2109.     It is better only to use this function for years from -7 to 1582!
  2110.  
  2111.    BUGS
  2112.     No known bugs.
  2113.  
  2114.    SEE ALSO
  2115.     JulianMonthDays(),GregorianYearDays(),HeisYearDays()
  2116.  
  2117. Date/JYearToScaliger                                     Date/JYearToScaliger
  2118.  
  2119.    NAME
  2120.     JYearToScaliger -- Returns the year as Scaliger year. (V33)
  2121.  
  2122.    SYNOPSIS
  2123.     syear := JYearToScaliger(year);
  2124.  
  2125.     PROCEDURE JYearToScaliger(year : INTEGER) : INTEGER;
  2126.  
  2127.    FUNCTION
  2128.     Returns the Scaliger year.
  2129.  
  2130.    INPUTS
  2131.     year     - Julian year
  2132.  
  2133.    RESULT
  2134.     syear - The Scaliger year
  2135.  
  2136.    EXAMPLE
  2137.     ...
  2138.     syear := JYearToScaliger(1582);
  2139.     ...
  2140.  
  2141.    NOTES
  2142.     It is better to use this function only from -7 to 1582!
  2143.  
  2144.    BUGS
  2145.     unknown.
  2146.  
  2147.    SEE ALSO
  2148.     GYearToScaliger(),HYearToScaliger()
  2149.  
  2150. Date/LMT                                                             Date/LMT
  2151.  
  2152.    NAME
  2153.     LMT -- Calculates your local time in your timezone (V33)
  2154.  
  2155.    SYNOPSIS
  2156.     secs := LMT(secs,meridian,pos);
  2157.  
  2158.     PROCEDURE LMT(secs : LONGINT; meridiandegree,
  2159.         posdegree : REAL) : LONGINT;
  2160.  
  2161.    FUNCTION
  2162.     Calculates your Local Mean Time of you place!
  2163.  
  2164.    INPUTS
  2165.     secs     - Seconds of the running day (hours*3600+min*60+sec)
  2166.     meridian - Degrees of your timezone-meridian
  2167.     pos      - Degrees of your place
  2168.  
  2169.    RESULT
  2170.     secs - Local seconds of the running day
  2171.  
  2172.    EXAMPLE
  2173.     ...
  2174.     secs := LMT(76080,15.0,8.923055556);
  2175.     ...
  2176.  
  2177.    NOTES
  2178.     none
  2179.  
  2180.    BUGS
  2181.     No errorcheck, if you put in valid degrees (-180 to +180)
  2182.  
  2183.    SEE ALSO
  2184.  
  2185.  
  2186. Date/MJDtoJD                                                     Date/MJDtoJD
  2187.  
  2188.    NAME
  2189.     MJDtoJD -- Switches from MJD to JD. (V33)
  2190.  
  2191.    SYNOPSIS
  2192.     jd := MJDtoJD(mjd);
  2193.  
  2194.     PROCEDURE MJDtoJD(mjd : LONGINT) : LONGINT;
  2195.  
  2196.    FUNCTION
  2197.     Returns the Julianday of a Modified Julianday.
  2198.  
  2199.    INPUTS
  2200.     mjd - Modified Julianday
  2201.  
  2202.    RESULT
  2203.     jd - The Julianday
  2204.  
  2205.    EXAMPLE
  2206.     ...
  2207.     jd := JDtoMJD(49353);
  2208.     ...
  2209.  
  2210.    NOTES
  2211.     none
  2212.  
  2213.    BUGS
  2214.     unknown.
  2215.  
  2216.    SEE ALSO
  2217.     MJDtoJD()
  2218.  
  2219. Date/ScaligerYearToG                                     Date/ScaligerYearToG
  2220.  
  2221.    NAME
  2222.     ScaligerYearToG -- Returns the Scaliger year as Gregorian year. (V33)
  2223.  
  2224.    SYNOPSIS
  2225.     year := ScaligerYearToG(syear);
  2226.  
  2227.     PROCEDURE ScaligerYearToG(syear : INTEGER) : INTEGER;
  2228.  
  2229.    FUNCTION
  2230.     Returns the Gregorian year of a Scaliger year.
  2231.  
  2232.    INPUTS
  2233.     syear     - Scaliger year
  2234.  
  2235.    RESULT
  2236.     year - The Gregorian year
  2237.  
  2238.    EXAMPLE
  2239.     ...
  2240.     year := ScaligerYearToG(6400);
  2241.     ...
  2242.  
  2243.    NOTES
  2244.     It is better to use this function only from 4707 to 7981!
  2245.  
  2246.    BUGS
  2247.     unknown.
  2248.  
  2249.    SEE ALSO
  2250.     ScaligerYearToJ(),ScaligerYearToH()
  2251.  
  2252. Date/ScaligerYearToH                                     Date/ScaligerYearToH
  2253.  
  2254.    NAME
  2255.     ScaligerYearToH -- Returns the Scaliger year as Heis year. (V33)
  2256.  
  2257.    SYNOPSIS
  2258.     year := ScaligerYearToH(syear);
  2259.  
  2260.     PROCEDURE ScaligerYearToH(syear : INTEGER) : INTEGER;
  2261.  
  2262.    FUNCTION
  2263.     Returns the Heis year of a Scaliger year.
  2264.  
  2265.    INPUTS
  2266.     syear     - Scaliger year
  2267.  
  2268.    RESULT
  2269.     year - The Heis year
  2270.  
  2271.    EXAMPLE
  2272.     ...
  2273.     year := ScaligerYearToH(7000);
  2274.     ...
  2275.  
  2276.    NOTES
  2277.     It is better to use this function only from 4707 to 7981!
  2278.  
  2279.    BUGS
  2280.     unknown.
  2281.  
  2282.    SEE ALSO
  2283.     ScaligerYearToJ(),ScaligerYearToG()
  2284.  
  2285. Date/ScaligerYearToJ                                     Date/ScaligerYearToJ
  2286.  
  2287.    NAME
  2288.     ScaligerYearToJ -- Returns the Scaliger year as Julian year. (V33)
  2289.  
  2290.    SYNOPSIS
  2291.     year := ScaligerYearToJ(syear);
  2292.  
  2293.     PROCEDURE ScaligerYearToJ(syear : INTEGER) : INTEGER;
  2294.  
  2295.    FUNCTION
  2296.     Returns the Julian year of a Scaliger year.
  2297.  
  2298.    INPUTS
  2299.     syear     - Scaliger year
  2300.  
  2301.    RESULT
  2302.     year - The Julian year
  2303.  
  2304.    EXAMPLE
  2305.     ...
  2306.     year := ScaligerYearToJ(4800);
  2307.     ...
  2308.  
  2309.    NOTES
  2310.     It is better to use this function only from 4707 to 6295!
  2311.  
  2312.    BUGS
  2313.     unknown.
  2314.  
  2315.    SEE ALSO
  2316.     ScaligerYearToG(),ScaligerYearToH()
  2317.  
  2318. Date/SecToTime                                                 Date/SecToTime
  2319.  
  2320.    NAME
  2321.     SecToTime -- Returns the time from seconds (V33)
  2322.  
  2323.    SYNOPSIS
  2324.     SecToTime(secs,hour,min,sec);
  2325.  
  2326.     PROCEDURE SecToTime(secs : LONGINT; VAR hour,min,sec : SHORTINT);
  2327.  
  2328.    FUNCTION
  2329.     Gives you back the time from the specified seconds
  2330.  
  2331.    INPUTS
  2332.     secs - Time in seconds
  2333.  
  2334.    RESULT
  2335.     hour - hours (0-23)
  2336.     min  - minutes (0-59)
  2337.     sec  - seconds (0-59)
  2338.  
  2339.    EXAMPLE
  2340.     ...
  2341.     SecToTime(76860,hour,min,sec);
  2342.     ...
  2343.  
  2344.    NOTES
  2345.     Don't forget to convert 24h time to AM/PM time if needed!
  2346.  
  2347.    BUGS
  2348.     No errorcheck, if you use a valid time
  2349.  
  2350.    SEE ALSO
  2351.     TimeToSec()
  2352.  
  2353. Date/TimeToJD                                                   Date/TimeToJD
  2354.  
  2355.    NAME
  2356.     TimeToJD -- Returns the JD for a time. (V33)
  2357.  
  2358.    SYNOPSIS
  2359.     jd := TimeToJD(hour,min,sec);
  2360.  
  2361.     PROCEDURE TimeToJD(hour,min,sec : SHORTINT) : REAL;
  2362.  
  2363.    FUNCTION
  2364.     Returns the JD for a specified time.
  2365.  
  2366.    INPUTS
  2367.     hour - hour of the time to convert
  2368.     min  - minute of the time to convert
  2369.     sec  - sec. of the time to convert
  2370.  
  2371.    RESULT
  2372.     jd - This is the JD time
  2373.  
  2374.    EXAMPLE
  2375.     ...
  2376.     jd := TimeToJD(16,33,0);
  2377.     ...
  2378.  
  2379.    NOTES
  2380.     none
  2381.  
  2382.    BUGS
  2383.     There is no check, if the specified time is a valid time!
  2384.  
  2385.    SEE ALSO
  2386.     JDToTime()
  2387.  
  2388. Date/GregorianEaster                                     Date/GregorianEaster
  2389.  
  2390.    NAME
  2391.     GregorianEaster -- Returns the date of eastern in a year (V33)
  2392.  
  2393.    SYNOPSIS
  2394.     GregorianEaster(year,dday,dmonth);
  2395.  
  2396.     PROCEDURE GregorianEaster(year : INTEGER;
  2397.         VAR dday,dmonth : SHORTINT);
  2398.  
  2399.    FUNCTION
  2400.     Returns the date of eastern for a specified year.
  2401.  
  2402.    INPUTS
  2403.     year  - eastern is calculated for this year
  2404.  
  2405.    RESULT
  2406.     dday   - day of easter-Sunday
  2407.     dmonth - month of easter-Sunday
  2408.  
  2409.    EXAMPLE
  2410.     ...
  2411.     GregorianEaster(1994,dday,dmonth);
  2412.     ...
  2413.  
  2414.    NOTES
  2415.     Use this only for 1900 to 2099!
  2416.     Tested for 1977-1994! But this formula is from Gauß - so it must be
  2417.     correct :)
  2418.  
  2419.    BUGS
  2420.     None.
  2421.  
  2422.    SEE ALSO
  2423.     GEP(),GregorianJHSB()
  2424.  
  2425. Date/TimeToSec                                                 Date/TimeToSec
  2426.  
  2427.    NAME
  2428.     TimeToSec -- Returns the time in seconds (V33)
  2429.  
  2430.    SYNOPSIS
  2431.     secs := TimeToSec(hour,min,sec);
  2432.  
  2433.     PROCEDURE TimeToSec(hour,min,sec : SHORTINT) : LONGINT;
  2434.  
  2435.    FUNCTION
  2436.     Gives you back the time in seconds
  2437.  
  2438.    INPUTS
  2439.     hour - hours you want (0-23)
  2440.     min  - minutes you want (0-59)
  2441.     sec  - seconds you want (0-59)
  2442.  
  2443.    RESULT
  2444.     secs - Time in seconds
  2445.  
  2446.    EXAMPLE
  2447.     ...
  2448.     secs := TimeToSec(21,15,00);
  2449.     ...
  2450.  
  2451.    NOTES
  2452.     Don't forget to convert AM/PM time to 24h time!
  2453.  
  2454.    BUGS
  2455.     No errorcheck, if you use a valid time
  2456.  
  2457.    SEE ALSO
  2458.     SecToTime()
  2459.  
  2460. Date/TimeZoneFactor                                       Date/TimeZoneFactor
  2461.  
  2462.    NAME
  2463.     TimeZoneFactor -- Returns the value you have to add to GMT time (V33)
  2464.  
  2465.    SYNOPSIS
  2466.     addhours := TimeZoneFactor(degrees);
  2467.  
  2468.     PROCEDURE TimeZoneFactor(degree : SHORTINT) : SHORTINT;
  2469.  
  2470.    FUNCTION
  2471.     This gives you the hours you have to add to GMT time,
  2472.     specified on the fact, that a timezone is 15 degrees
  2473.     and that GMT is centered on 0 degrees!
  2474.  
  2475.    INPUTS
  2476.     degrees - Position of timezone you live in (from -180 to +180)
  2477.  
  2478.    RESULT
  2479.     addhours - Time to add to GMT time to get your locale zone time
  2480.         (-12 to +12)
  2481.  
  2482.    EXAMPLE
  2483.     ...
  2484.     addhours := TimeZoneFactor(-8);
  2485.     ...
  2486.  
  2487.    NOTES
  2488.     none
  2489.  
  2490.    BUGS
  2491.     No errorcheck, if you put in valid degrees (-180 to +180)
  2492.     Only full degrees are supportet, keep sure that you
  2493.     round in the right way for 0.x degree places
  2494.     I am not sure about the correct +/- behaviour!!!
  2495.  
  2496.    SEE ALSO
  2497.  
  2498.  
  2499.